package main
import (
	"fmt"
	"sync"
)
var x1  = 0
func increment1(wg *sync.WaitGroup, m *sync.Mutex) {
	m.Lock()
	x1 = x1 + 1
	m.Unlock()
	//任务完成，将任务队列中的任务数量-1，其实.Done就是.Add(-1)
	wg.Done()
}
func main() {
	//声明一个全局变量
	var w sync.WaitGroup
	var m sync.Mutex
	for i := 0; i < 1000; i++ {
		//每创建一个goroutine，就把任务队列中任务的数量+1
		w.Add(1)
		go increment1(&w, &m)
	}
	//.Wait()这里会发生阻塞，直到队列中所有的任务结束就会解除阻塞
	w.Wait()
	fmt.Println("final value of x", x1)
}